package com.meta.framework.core;

import com.meta.framework.common.constant.HttpStatus;
import com.meta.framework.common.utils.StringUtils;
import lombok.Data;

import java.io.Serializable;

/**
 * 接口返回对象
 *
 * @Title:
 * @Package: com.meta.framework.core.
 * @Author: M.simple
 * @Remark: The modified content
 * @CreateDate: 2023-12-03 22:55
 * @Version: v2.0
 */
@Data
public class ResponseVo<T> implements Serializable {

	private static final long serialVersionUID = 1L;


	private int code;

	private String msg;

	private T data;

	/**
	 * 初始化一个新创建的 AjaxResult 对象，使其表示一个空消息。
	 */
	public ResponseVo()
	{
	}

	/**
	 * 初始化一个新创建的 ResponseVo 对象
	 *
	 * @param code 状态码
	 * @param msg 返回内容
	 */
	public ResponseVo(int code, String msg)
	{
		this.code = code;
		this.msg = msg;
	}

	/**
	 * 初始化一个新创建的 AjaxResult 对象
	 *
	 * @param code 状态码
	 * @param msg 返回内容
	 * @param data 数据对象
	 */
	public ResponseVo(int code, String msg, T data)
	{
		this.code = code;
		this.msg = msg;
		if (StringUtils.isNotNull(data))
		{
			this.data = data;
		}
	}

	/**
	 * 返回成功消息
	 *
	 * @return 成功消息
	 */
	public static ResponseVo success()
	{
		return ResponseVo.success("操作成功");
	}

	/**
	 * 返回成功数据
	 *
	 * @return 成功消息
	 */
	public static ResponseVo success(Object data)
	{
		return ResponseVo.success("操作成功", data);
	}

	/**
	 * 返回成功消息
	 *
	 * @param msg 返回内容
	 * @return 成功消息
	 */
	public static ResponseVo success(String msg)
	{
		return ResponseVo.success(msg, null);
	}

	/**
	 * 返回成功消息
	 *
	 * @param msg 返回内容
	 * @param data 数据对象
	 * @return 成功消息
	 */
	public static ResponseVo success(String msg, Object data)
	{
		return new ResponseVo(HttpStatus.SUCCESS, msg, data);
	}

	/**
	 * 返回错误消息
	 *
	 * @return
	 */
	public static ResponseVo error()
	{
		return ResponseVo.error("操作失败");
	}

	/**
	 * 返回错误消息
	 *
	 * @param msg 返回内容
	 * @return 警告消息
	 */
	public static ResponseVo error(String msg)
	{
		return ResponseVo.error(msg, null);
	}

	/**
	 * 返回错误消息
	 *
	 * @param msg 返回内容
	 * @param data 数据对象
	 * @return 警告消息
	 */
	public static ResponseVo error(String msg, Object data)
	{
		return new ResponseVo(HttpStatus.ERROR, msg, data);
	}

	/**
	 * 返回错误消息
	 *
	 * @param code 状态码
	 * @param msg 返回内容
	 * @return 警告消息
	 */
	public static ResponseVo error(int code, String msg)
	{
		return new ResponseVo(code, msg, null);
	}
}
